<?php

class Core extends Controller {
    
    public $is_ajax = false;
    public $is_history = true;
    
    function __construct() {
      
        parent::__construct();        
        
        $this->load->initialize($this->config->item('router', 'core_main'), $this->uri->current_uri());
        
        //Если главный контроллер уже инициализировался то 
        //завершаем работу конструктора
        if (defined('IS_CONSTRUCT')) return;
        
        //Загрузка настроек
        $this->config->load_settings($this->db);
        
        //Загружем права
        $this->usr->get_rights();
        
        //Проверка прав доступа к странице
        if (!$this->usr->check_rights()) {
            
            show_error('Нет доступа!!!');
        }
        
        //Задаём загаловки страницы
        $this->template->set_title($this->load->page_info('title', 'www'));
        
        foreach ($this->uri->modul_segments_array() as $row) {
            
            $title = $this->load->page_info('title', $row);
            
            if ($title !== false) {
            
                $this->template->set_title($title);
            }
        }
        
        //Задаём метаинформацию
        $description = $this->load->page_info('description');
        $keywords = $this->load->page_info('keywords');
        
        if ($description != NULL && $description != '') {
        
            $this->template->set_meta('description', $description);
        }
        else {
            
            $this->template->set_meta('description', $this->config->get('description', 'core'));
        }
        
        if ($keywords != NULL && $keywords != '') {
        
            $this->template->set_meta('keywords', $keywords);
        }
        else {
            
            $this->template->set_meta('keywords', $this->config->get('keywords', 'core'));
        }
        
        //Если вызов через AJAX
        if (defined('IS_AJAX')) {
            
            $this->is_ajax = true;
        }
        
        //Настраиваем Template
        $tamplate['title_separator'] = $this->config->get('title_separator', 'core');
        $tamplate['title_direction'] = ($this->config->get('title_direction', 'core')) ? 'LTR' : 'RTL';
        $this->template->initialize($tamplate);
        
        //Задаём глобальный шаблон
        $this->template->set_template($this->load->page_info('global_template'));
        
        //Задаём глобальные переменные
        $this->template->set_block('ci_bread_crumbs', $this->get_bread_crumbs());
        $this->template->set('ci_title', $this->load->page_info('title'));
        $this->template->set('site_title', $this->config->get('site_title', 'core'));
        $this->template->set('is_ajax', $this->is_ajax);
        
        //Формируем год для копирайта
        if (date('Y') == $this->config->get('site_year', 'core')) {
            
            $this->template->set('site_year', date('Y'));
        }
        else {
            
            $this->template->set('site_year', $this->config->get('site_year', 'core').' - '.date('Y'));
        }
        
        //Профилирование
        if ($this->config->get('enable_profiler', 'core') == '1') {
        
            $this->output->enable_profiler(true);
        }
    }
    
    
    function __construct_admin() {
        
        parent::__construct();        
        
        $this->load->initialize($this->config->item('router', 'core_main'), $this->uri->current_uri());
    }
    
  
    /**
     * Отображение страницы
     * @param $vars array - переменные для передачи в шаблон
     * @param $view string - имя шаблона
     * @param $block boolean - блок или нет
     */
    public function render($vars, $view = 'index', $block = false) {
        
        //Если AJAX запрос
        if ($this->is_ajax) {
            
            if(is_array($vars)) {
            
                $this->template->view($view, $vars, false);
            }
            else {
                
                print $vars;
            }
        }
        //Если виджет запрос
        else if(defined('IS_CONSTRUCT') || $block) {
            
            if (is_array($vars)) {
            
                $this->load->view($view, $vars);
            }
            else {
                
                print $vars;
            }
        }
        //Главный запрос
        else {
            
            define('IS_CONSTRUCT', TRUE);
            
            //Выводим виджеты
            $this->widget->run();
            
            if (is_array($vars)) {
            
                $this->template->set_block('content', $this->template->view($view, $vars));
            }
            else {
                
                $this->template->set_block('content', $vars);
            }
            
            //Исключения для сохранении истории в cookie
            if ( $this->is_history ) {
            
                $this->session->set_userdata('history', $this->uri->uri_string());
            }
            
            $this->template->render($this->load->page_info('template'));
            $this->config->save_settings();
        }
    }
    
    
    /**
     * Вывод хлебных крошек
     * @param $del string - разделитель, если не задан используется глобальный
     * @param $url boolean - выводить ссылками
     * @return string
     */
    public function get_bread_crumbs($del = false, $url = true) {
        
        $del = ($del === false) ? $this->config->get('bread_crumbs_separator', 'core') : $del;
        
        $result[] = ($url === false) ? $this->load->page_info('title', 'www') : anchor('', $this->load->page_info('title', 'www'));
        
        foreach ($this->uri->modul_segments_array() as $row) {
            
            $title = $this->load->page_info('title', $row);
            
            if ($title !== false) {
                
                $result[] = ($url === false) ? $title : anchor($this->load->page_info('url', $row), $title);
            }
        }
        
        return implode($del, $result);
    }
    
    
    /**
     * Добавление сегмента к хлебным крошкам
     * @param $title string - название
     * @param $uri string - сегмент относительно модуля
     * @param $del string - разделитель, если не указан используется глобальный
     * @param $url boolean - выводить ссылками
     */
    public function set_bread_crumbs ($title, $uri = '', $del = false, $url = true) {
        
        $del = ($del === false) ? $this->config->get('bread_crumbs_separator', 'core') : $del;
        
        if ($url) {
        
            $this->template->set_block('ci_bread_crumbs', $del.modul_anchor($uri, $title));
        }
        else {
            
            $this->template->set_block('ci_bread_crumbs', $del.$title);
        }
    }
    
    
}